package com.example.kotlindemo.basic

import com.example.kotlindemo.utils.Logger

// Kotlin 把所有类型都当成对象

// val —— 只读变量（相当于 Java 的 final），一旦赋值不能再修改。
// var —— 可变变量，可以多次赋值。

object DataTypes {
    fun test(tag:String) {
        val logger = Logger(tag)
        // 1. 数据类型
        // 1.1 整型
        val intNum: Int = 10
        val longNum: Long = 100L
        val shortNum: Short = 1
        val byteNum: Byte = 2

        // 1.2 浮点型
        val floatNum: Float = 3.14f
        val doubleNum: Double = 3.1415926

        // 1.3 字符型
        val charValue: Char = 'A'

        // 1.4 布尔型
        val boolValue: Boolean = true

        // 1.5 字符串
        val str: String = "Hello, Kotlin!"

        // 1.6 Array：数组。
        val arr = arrayOf("a", "b", "c")
        // 1.7 List/Set/Map：集合类型  listOf() 只读	mutableListOf() 可变
        val list = listOf("apple", "banana", "cherry")
        val map = mapOf("A" to 1, "B" to 2, "C" to 3)


        logger.print("intNum = $intNum")
        logger.print("str = $str")

        // 2. 逻辑语句
        // 2.1 when 表达式
        val day:Int = 3
        val dayName:String = when(day) {
            1 -> "Monday"
            2 -> "Tuesday"
            3 -> "Wednesday"
            else -> "Other"
        }
        logger.print("dayName=$dayName")
        // 2.2 循环语句
        logger.print("for循环：包含5")
        for (i in 1..5) { // 包含5
            logger.print("i=$i")
        }
        logger.print("for循环：不包含5")
        for (i in 1 until 5) { // 不包含5
            logger.print("i=$i")
        }
        logger.print("for循环：倒序")
        for (i in 5 downTo 1) { // 倒序
            logger.print("i=$i")
        }
        logger.print("for循环：步长")
        for (i in 1..10 step 2) { // 步长2
            logger.print("i=$i")
        }

        logger.print("do...while语句")
        var i = 0
        while (i < 5) {
            logger.print(i)
            i++
        }

        do {
            logger.print(i)
            i--
        } while (i > 0)

        logger.print("遍历数组")
        for (element in arr) {
            logger.print(element)
        }

        logger.print("遍历list")
        for (item in list){
            logger.print("list-$item")
        }

        list.forEach { logger.print("list $it") }

        // 方式3：带下标
        for ((index, value) in list.withIndex()) {
            logger.print("list[$index]=$value")
        }

        logger.print("遍历map")
        // 方式1：遍历所有键值对
        for ((key, value) in map) {
            logger.print("$key -> $value")
        }

        // 方式2：遍历所有key
        for (key in map.keys) {
            logger.print("key=$key, value=${map[key]}")
        }

        // 方式3：forEach
        map.forEach { (k, v) -> logger.print("$k = $v") }

    }
}

